Перейти к основному содержимому

Первые шаги с Docker и Kubernetes

Разработчику Архитектору Инженеру

Установка Docker Desktop

Docker Desktop — это графическое приложение, которое объединяет движок Docker, клиент командной строки и инструменты виртуализации. Для работы на Windows требуется активировать функции виртуализации в BIOS/UEFI материнской платы.

Системные требования

  • Операционная система: Windows 10 или Windows 11 (версии 20H2 и выше).
  • Архитектура процессора: x64 с поддержкой виртуализации (Intel VT-x / AMD-V).
  • Память: минимум 4 ГБ ОЗУ (рекомендуется 8 ГБ и более).
  • Диск: свободное место не менее 5 ГБ.

Пошаговая установка

  1. Скачивание установщика. Перейдите на официальный сайт проекта Docker и скачайте файл Docker Desktop Installer.exe.
  2. Запуск установки. Запустите скачанный файл от имени администратора.
  3. Настройка компонентов. В мастере установки отметьте галочками следующие опции:
    • Использование гипервизора Hyper-V.
    • Использование WSL 2 (Windows Subsystem for Linux) версии 2. Это критически важно для производительности и совместимости с Kubernetes.
  4. Завершение. Дождитесь окончания процесса и перезагрузите компьютер при необходимости.
  5. Первый запуск. Откройте приложение Docker Desktop. Иконка в трее должна стать зеленой, что свидетельствует о готовности движка.

Проверка работоспособности

Откройте терминал PowerShell или командную строку и выполните команду:

docker --version

Система выведет номер версии, например: Docker version 24.0.7, build afdd53b.

Выполните тестовый запуск образа для проверки изоляции процессов:

docker run hello-world

Команда скачает образ hello-world, запустит контейнер и выведет сообщение об успешной работе ядра Docker.


Работа с образами и запуск контейнеров

Образ (Image) — это неизменяемый шаблон, содержащий код приложения, библиотеки и зависимости. Контейнер — это запущенный экземпляр образа.

Получение образов из реестра

Реестр Docker Hub является основным хранилищем публичных образов. Для загрузки образа используйте команду pull.

Пример получения официального образа веб-сервера Nginx:

docker pull nginx:latest

Параметр latest указывает на последнюю стабильную версию. Можно указать конкретную версию, например nginx:1.25.


Просмотр доступных образов

Для проверки наличия загруженных образов используется команда:

docker images

Вывод содержит таблицу с колонками:

  • REPOSITORY: имя образа.
  • TAG: версия образа.
  • IMAGE ID: уникальный идентификатор слоя.
  • CREATED: дата создания.
  • SIZE: размер на диске.

Запуск контейнера

Команда run создает и запускает контейнер из указанного образа.

Базовый пример запуска Nginx:

docker run -d --name my-web-server nginx:latest

Разбор параметров:

  • -d: режим "detached" (запуск в фоновом режиме).
  • --name: задание именного метки для контейнера (my-web-server).
  • nginx:latest: имя и тег образа.

Проверка состояния контейнера

Список активных контейнеров отображается командой:

docker ps

Чтобы увидеть все контейнеры (включая остановленные), добавьте флаг -a:

docker ps -a

Доступ к приложению внутри контейнера

По умолчанию контейнеры изолированы от сети хоста. Чтобы открыть приложение по IP-адресу компьютера, необходимо пробросить порт.

Пример запуска с пробросом порта 80:

docker run -d -p 8080:80 --name my-web-server nginx:latest

Параметр -p 8080:80 означает:

  • Левое число 8080: порт на хосте (Windows).
  • Правое число 80: порт внутри контейнера (стандартный порт Nginx).

Откройте браузер и перейдите по адресу http://localhost:8080. Вы увидите приветственную страницу Nginx.


Управление жизненным циклом

Остановка и удаление контейнера выполняются отдельными командами:

docker stop my-web-server
docker rm my-web-server

Для удаления всех контейнеров и очистки пространства можно использовать:

docker system prune

Эта команда удалит остановленные контейнеры, неиспользуемые сети и дубликаты образов.


Настройка Kubernetes на локальной машине

Kubernetes (K8s) — это система автоматизированного развертывания, масштабирования и управления контейнеризированными приложениями. Для локальной разработки на Windows используется встроенный в Docker Desktop компонент Kind или Minikube. В данном руководстве применяется стандартный режим Docker Desktop с включенным Kubernetes.

Активация Kubernetes в Docker Desktop

  1. Откройте настройки Docker Desktop (шестеренка в левом верхнем углу окна).
  2. Перейдите во вкладку Settings -> Kubernetes.
  3. Установите переключатель Enable Kubernetes в положение "Вкл".
  4. Нажмите кнопку Apply & Restart. Система перезапустит сервисы и создаст кластер.

Процесс может занять несколько минут. В трее появится индикатор статуса кластера.


Установка CLI клиента kubectl

Инструмент kubectl позволяет взаимодействовать с API сервером Kubernetes. Он устанавливается автоматически вместе с Docker Desktop, но его наличие нужно проверить.

kubectl version --client

Если вывод показывает ошибку, скачайте бинарный файл kubectl.exe с официального сайта Kubernetes и поместите его в папку, добавленную в переменную окружения PATH.


Проверка состояния кластера

Команда get nodes отображает узлы (ноды) кластера.

kubectl get nodes

Ожидаемый вывод:

NAME STATUS ROLES AGE VERSION
docker-desktop Ready control-plane,master 5m v1.29.0

Статус Ready означает, что нода готова принимать рабочие нагрузки.


Развёртывание приложения и оркестрация

Оркестрация включает создание манифестов (описаний ресурсов), их применение к кластеру и мониторинг состояния.

Создание манифеста Deployment

Манифест описывает желаемое состояние приложения. Создайте файл deployment.yaml со следующим содержимым:

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: nginx-container
image: nginx:latest
ports:
- containerPort: 80

Пояснение структуры файла:

  • apiVersion: версия API Kubernetes (для деплоймента это apps/v1).
  • kind: тип ресурса (Deployment).
  • replicas: количество идентичных копий (подов) приложения. Значение 2 означает запуск двух экземпляров.
  • selector.matchLabels: фильтр для поиска подов, управляемых этим деплойментом.
  • template.spec.containers: описание контейнера внутри пода.

Применение конфигурации

Для внедрения ресурса в кластер используется команда apply:

kubectl apply -f deployment.yaml

Система сообщит о создании ресурса:

deployment.apps/my-app-deployment created

Проверка работы подов

Под (Pod) — минимальная единица развёртывания в Kubernetes. Команда get pods показывает статус созданных экземпляров:

kubectl get pods

Пример вывода:

NAME READY STATUS RESTARTS AGE
my-app-deployment-5d4f8b7c9-x2k4l 1/1 Running 0 10s
my-app-deployment-5d4f8b7c9-j9m3n 1/1 Running 0 10s

Статус Running и значение 1/1 означают, что контейнер успешно запустился.


Масштабирование приложения

Kubernetes позволяет изменять количество реплик без остановки сервиса.

Увеличение количества копий до 5:

kubectl scale deployment my-app-deployment --replicas=5

Проверка результата:

kubectl get pods

Теперь в списке будет пять работающих подов.


Предоставление доступа извне

По умолчанию поды доступны только внутри кластера. Для доступа из браузера необходимо создать службу типа LoadBalancer или NodePort.

Создайте файл service.yaml:

apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80

Применение службы:

kubectl apply -f service.yaml

Получение информации о службе:

kubectl get svc my-app-service

В режиме Docker Desktop на Windows адрес внешней службы часто присваивается автоматически через внутренний прокси. Если статус EXTERNAL-IP равен <pending>, используйте команду port-forward для локального доступа:

kubectl port-forward svc/my-app-service 8080:80

Теперь приложение доступно по адресу http://localhost:8080.


Мониторинг и управление

Эффективное управление требует постоянного отслеживания логов и ресурсов.

Просмотр логов

Для просмотра вывода приложения из конкретного пода:

kubectl logs my-app-deployment-5d4f8b7c9-x2k4l

Просмотр логов всех подов в рамках деплоймента:

kubectl logs -l app=my-app

Описание ресурса

Команда describe предоставляет детальную информацию о состоянии объекта, включая события и ошибки:

kubectl describe pod my-app-deployment-5d4f8b7c9-x2k4l

В разделе Events можно увидеть процессы создания, привязки к узлу и возможные сбои.


Удаление ресурсов

Для полного удаления приложения из кластера:

kubectl delete -f deployment.yaml
kubectl delete -f service.yaml

Или удаление одного ресурса по имени:

kubectl delete deployment my-app-deployment